package xpn.platform.modules.sys.user;

import net.sf.json.JSONObject;

import java.util.List;

/**
 * 人员服务
 * <p>
 * <br/>
 * {@link #findSendeeSelectUsers(String, Integer, Integer, String)}<br/>
 * {@link #filterUsers(List, String, Integer, Integer)}<br/>
 * {@link #findByRoleCondition(String)}<br/>
 *
 * @author bobatkm Oct 19, 2017
 */
public interface SysUserService {
	/**
	 * 返回当前会话用户
	 *
	 * @return ： 用户对象
	 */
	SysUser getSessionUser();

	/**
	 * 根据指定的角色条件和ou条件查找选人发送的用户列表。
	 *
	 * @param roleCondition
	 *            ：角色条件。示例：公司领导 and 部门领导 or 绩效考核
	 * @param ouLevel
	 *            ： ou层次。0待办O，1代表OU1，2代表OU2，以此类推。
	 * @param ouType
	 *            ：ou类型。0代表和当前用户相同的ou；1代表和当前用户不同的ou
	 * @param orgId
	 *            ：组织机构的id。
	 * @param starterId 原始作者Id
	 *
	 * @param mySenderId 本人的发送人Id
	 *
	 * @param specificReceiverUrl  指定用户Url
	 *
	 * @param xpnTokenName tokenKey
	 *
	 * @param token token
	 *
	 * @return ： 符合条件的用户列表。
	 */
	List<SysUser> findSendeeSelectUsers(String roleCondition, Integer ouLevel, Integer ouType, String orgId,
										String starterId,String mySenderId, String specificReceiverUrl,
										String xpnTokenName,
										String token);

	/**
	 *
	 * @param roleCondition
	 * @param starterId
	 * @param mySenderId
	 * @param specificReceiverUrl
	 * @param xpnTokenName
	 * @param token
	 * @return
	 */
	List<SysUser> findByRoleCondition(
			String roleCondition, String starterId, String mySenderId,
			String specificReceiverUrl, String xpnTokenName, String token);

	/**
	 * 根据指定ou条件过滤用户列表。
	 *
	 * @param userList
	 *            ： 用户列表。
	 * @param ou
	 *            ： ou名称。用来对比的ou。
	 * @param ouLevel
	 *            ： ou层次。0待办O，1代表OU1，2代表OU2，以此类推。
	 * @param ouType
	 *            ：ou类型。0代表留下ou和指定的ou相同的用户；1代表和留下ou和指定ou不同的用户
	 * @return ： 过滤后的用户列表
	 */
	List<SysUser> filterUsers(List<SysUser> userList, String ou, Integer ouLevel, Integer ouType);

	/**
	 * 获取指定用户user所属机构的全名
	 *
	 * @param user
	 * @return
	 */
	String getOrgFullName(SysUser user);

	/**
	 * 获取指定用户user所属指定机构层次ouLevel的机构名称
	 *
	 * @param user
	 * @param ouLevel
	 * @return
	 */
	String getOUName(SysUser user, int ouLevel);

	/**
	 * 更新用户密码
	 * @param userId
	 * @param password
	 * @param newPassword
	 */
    void updatePassword(String userId, String password, String newPassword);
}
